<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1、call
        // var o = {
        //     name: 'andy'
        // }

        // function fn(a, b) {
        //     console.log(this);
        //     console.log(a + b);
        // }
        // fn.call(o, 1, 2)
        // // call 第一个可以调用函数 第二个可以改变函数内的this指向
        // // call的主要作用可以实现继承
        // function Father(uname, age, sex) {
        //     this.uname = uname;
        //     this.age = age;
        //     this.sex = sex;
        // }

        // function Son(uname, age, sex) {
        //     Father.call(this, uname, age, sex);
        // }
        // var son = new Son('刘德华', 18, '男');
        // console.log(son);
        // 2、apply应用
        var o = {
            name: 'andy'
        };

        function fn(arr) {
            console.log(this);
            console.log(arr);
        };
        fn.apply(o, ['pink']);
        // 也是调用函数 第二个可以改变函数内部this指向
        // 但是他的参数必须是伪数组
        // apply的主要作用 比如说我们可以利用apply借助于数学内置对象求最大值
        // Math.max();
        var arr = [1, 66, 3, 99, 4];
        Math.max.apply(null, arr);
        console.log(arr);
    </script>
</body>

</html>